package com.yiren.dbaa.module.exam.api;

import com.yiren.backstage.currency.entity.ProjectEntity;
import com.yiren.backstage.currency.enums.TaskStateEnum;
import com.yiren.backstage.judge.api.IExamJudge;

import java.util.List;

/**
 * Describe 考试页面更项目相关接口类
 *
 * @author WRX
 * @date 2022/7/19
 */
public interface IExamProjectApi {

    /**
     * 获取考试项目集合
     */
    List<ProjectEntity> getProjectList();

    /**
     * 获取灯光项目集合
     */
    List<ProjectEntity> getLightProjects();

    /**
     * 获取靠边停车项目
     */
    ProjectEntity getKbtcProject(List<ProjectEntity> projects);

    /**
     * 获取靠边停车前需要完成的项目
     */
    List<String> getKbtcReqProjects();

    /**
     * 设置项目状态
     *
     * @param projects
     * @param projectEntity
     */
    void setProjectState(List<ProjectEntity> projects, ProjectEntity projectEntity, TaskStateEnum taskState);

    /**
     * 加载开始考试项目
     */
    ProjectEntity loadStartPointInfo(int startExamProject, List<ProjectEntity> lightProjects);

    /**
     * 加载上车准备或灯光项目的后接项目
     */
    ProjectEntity loadFollowProject(ProjectEntity projectEntity, TaskStateEnum taskState, List<ProjectEntity> lightProjects);

    /**
     * 获取全程评判项目
     */
    ProjectEntity loadFullJudgeProject();

    /**
     * 判断项目是否被锁定
     */
    boolean isLockedProjectEntity(ProjectEntity projectEntity, List<ProjectEntity> executedPoint);

    /**
     * 判断靠边停车是否锁定
     */
    boolean isLockedKbtcProject(float trainingMileage, List<String> kbtcProjects);

    /**
     * 开启灯光项目
     */
    void startLightProject(List<ProjectEntity> lightProjects, IExamJudge iExamJudge);

    /**
     * 过滤当前的项目
     *
     * @return true 当前项目正在执行 false:当前项目未在执行
     */
    boolean filterCurProject(ProjectEntity curExecuteProject, ProjectEntity executeProject);

    /**
     * 达到里程自动执行靠边停车
     */
    boolean autoExecuteKbtc(ProjectEntity curExecuteProject, List<String> kbtcProjects, float trainingMileage);
}
